#!/bin/bash
#main.sh
#用于检测电源是否突然断电，并关闭服务器
CHK_IP=$1
function is_health() {
    local n=0
    ip_addr=$1
    while true; do
        ping -i .1 -c 3 $ip_addr >/dev/null
        if [ $? -ne 0 ] ;then
            echo "`date +%Y%m%d-%H%M%S`[ERROR]: 记录第${n}次不健康" >> error.log
            let n=n+1
        else
            # 如果ping得通
            n=0
            return 0  # 返回健康标志
        fi
        if [ $n -gt 3 ]; then
            return 1
        fi
        sleep 30   # 每个30秒检测一次
    done
}

local flg=0
while true; do
    if is_health ${CHK_IP}; then
        echo "`date +%Y%m%d-%H%M%S`[INFO]: 健康" >> info.log
    else
        echo "`date +%Y%m%d-%H%M%S`[ERROR]: 不健康, 可能是对方已经断电了，现在要进行关机" >> error.log
        echo "`date +%Y%m%d-%H%M%S`[ERROR]: 现在等待10分钟，就关机" >> error.log

        # 在10分钟内不断检测被检测ip的健康状态，如果是健康的话，则取消10分钟后关机的命令
        for ((i=0;i<10;i++)); do
            if ping -i .1 -c 3 ${CHK_IP} >/dev/null ; then
                flg=1
                break
            fi
            sleep 60
        done

        if [ $flg -eq 1 ]; then
            flg = 0
            continue
        fi
        # init 0   # 关机，目前被我注释了
        echo "`date +%Y%m%d-%H%M%S`[ERROR]: init 0" >> error.log
        break
    fi
    sleep 30

done
